
// Boost Includes ==============================================================
#include <boost/python.hpp>
#include <boost/cstdint.hpp>

// Includes ====================================================================
#include <OpenSG/OSGShaderParameter.h>
#include <OpenSG/OSGShaderParameterBase.h>
#include <OsgPtrHelpers.h>

// Using =======================================================================
using namespace boost::python;

// Declarations ================================================================
namespace  {

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(osg_ShaderParameter_dump_overloads_0_2, dump, 0, 2)


}// namespace 


// Module ======================================================================
void Export_src_pyste_gen_ShaderParameter()
{
    scope* osg_ShaderParameterBase_scope = new scope(
    class_< osg::ShaderParameterBase, bases< osg::AttachmentContainer > , boost::noncopyable >("ShaderParameterBase", no_init)
//        .def_readonly("NameFieldMask", &osg::ShaderParameterBase::NameFieldMask)
//        .def_readonly("MTInfluenceMask", &osg::ShaderParameterBase::MTInfluenceMask)
        .def("getClassType", &osg::ShaderParameterBase::getClassType, return_internal_reference< 1 >())
        .def("getClassTypeId", &osg::ShaderParameterBase::getClassTypeId)
        .def("getType", (osg::FieldContainerType& (osg::ShaderParameterBase::*)() )&osg::ShaderParameterBase::getType, return_internal_reference< 1 >())
        .def("getType", (const osg::FieldContainerType& (osg::ShaderParameterBase::*)() const)&osg::ShaderParameterBase::getType, return_internal_reference< 1 >())
        .def("getContainerSize", &osg::ShaderParameterBase::getContainerSize)
        //.def("getName", (std::string& (osg::ShaderParameterBase::*)() )&osg::ShaderParameterBase::getName, return_value_policy< copy_const_reference >())
        .def("getName", (const std::string& (osg::ShaderParameterBase::*)() const)&osg::ShaderParameterBase::getName, return_value_policy< copy_const_reference >())
        .def("setName", &osg::ShaderParameterBase::setName)
        .def("getBinSize", &osg::ShaderParameterBase::getBinSize)
        .def("copyToBin", &osg::ShaderParameterBase::copyToBin)
        .def("copyFromBin", &osg::ShaderParameterBase::copyFromBin)
        .staticmethod("getClassType")
        .staticmethod("getClassTypeId")
    );

    scope().attr("NextFieldId") = (int)osg::ShaderParameterBase::NextFieldId;
    scope().attr("NameFieldId") = (int)osg::ShaderParameterBase::NameFieldId;

    delete osg_ShaderParameterBase_scope;

    scope* osg_ShaderParameter_scope = new scope(
    class_< osg::ShaderParameter, bases< osg::ShaderParameterBase > , boost::noncopyable, osg::ShaderParameterRefPtr >("ShaderParameter", no_init)
        .def("changed", &osg::ShaderParameter::changed)
        .def("dump", &osg::ShaderParameter::dump, osg_ShaderParameter_dump_overloads_0_2())
        .def("hasChanged", &osg::ShaderParameter::hasChanged)
        .def("resetChanged", &osg::ShaderParameter::resetChanged)
        .def("getTypeId", &osg::ShaderParameter::getTypeId)
    );

    enum_< osg::ShaderParameter::SHPType >("SHPType")
        .value("SHPTypeVec3f", osg::ShaderParameter::SHPTypeVec3f)
        .value("SHPTypeUnknown", osg::ShaderParameter::SHPTypeUnknown)
        .value("SHPTypeVec4s", osg::ShaderParameter::SHPTypeVec4s)
        .value("SHPTypeVec2s", osg::ShaderParameter::SHPTypeVec2s)
        .value("SHPTypeBool", osg::ShaderParameter::SHPTypeBool)
        .value("SHPTypeVec3s", osg::ShaderParameter::SHPTypeVec3s)
        .value("SHPTypeMatrix", osg::ShaderParameter::SHPTypeMatrix)
        .value("SHPTypeReal", osg::ShaderParameter::SHPTypeReal)
        .value("SHPTypeString", osg::ShaderParameter::SHPTypeString)
        .value("SHPTypeVec2f", osg::ShaderParameter::SHPTypeVec2f)
        .value("SHPTypeInt", osg::ShaderParameter::SHPTypeInt)
        .value("SHPTypeVec4f", osg::ShaderParameter::SHPTypeVec4f)
    ;

    delete osg_ShaderParameter_scope;


    register_ptr_to_python<osg::ShaderParameterPtr>();
    implicitly_convertible<osg::ShaderParameterRefPtr, osg::ShaderParameterPtr>();
    implicitly_convertible<osg::ShaderParameterPtr, osg::AttachmentContainerPtr>();
    
    def("RefPtr", &pyopensg::ToRefPtr<osg::ShaderParameterPtr>);
    def("FCPtr", &pyopensg::ToFcPtr<osg::ShaderParameterPtr>);
}

